perm filename PLAIN.TEX[1,ALS] blob sn#693291 filedate 1982-12-31 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00008 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	\catcode`\{=1 \catcode`\}=2 \catcode`\$=3 \catcode`\&=4 \catcode`\#=6
C00009 00003	% Assign initial values to TeX's primitives
C00013 00004	% Here are macros for the automatic allocation of \count, \box, \dimen,
C00019 00005	% Here are macros to "simulate" some of the TeX80 primitives:
C00031 00006	% Here are other macros
C00039 00007	% Definitions for preloaded fonts
C00050 00008	% Hyphenation, and initial values for standard layout
C00051 ENDMK
C⊗;
\catcode`\{=1 \catcode`\}=2 \catcode`\$=3 \catcode`\&=4 \catcode`\#=6
\catcode`\↑=7 \catcode`\↑↑K=7 \catcode`\_=8 \catcode`\↑↑A=8
\catcode`\↑↑J=9 \catcode`\↑↑I=10 \catcode`\%=14
\catcode`\@=13 \def@{\penalty10000 \ }
\def\space{ }
{\catcode`\↑↑M=13 \gdef\obeylines{\catcode`\↑↑M=13 \let↑↑M=\par}} % NB \let!
{\catcode`\ =13 \gdef\obeyspaces{\catcode`\ =13\let =\space}}

\message{preloading codes,}

% We had to define the \catcodes above right away, even before this comment
% or the message line, which has the { and } characters.  Using the forms
% `\{ etc. instead of `{ allows us to read in this file even if those
% characters had been catcoded before.  (If we just want to read in PLAIN
% once, then % is the only character that has to be treated this way.)

% Here is a list of the characters that have been specially catcoded:
\def\specials{\  \\ \{ \} \$ \& \# \↑ \↑↑K \_ \↑↑A \↑↑J \↑↑I \%
  \@ \↑↑L \endlist}
\catcode`\↑↑L=13 \outer\def↑↑L{\par} % form-feed is "\outer"

% We make parentheses act like letters, temporarily, to avoid conflict
% with user-defined control sequences in certain cases.
\catcode`(=11 \catcode`)=11
% So far I haven't used this, but I probably will... e.g., \def\(foo){...}

\sfcode`)=0 \sfcode`'=0 \sfcode`"=0 \sfcode`]=0
\def\frenchspace{\sfcode`.=1000 \sfcode`?=1000 \sfcode`!=1000
  \sfcode`:=1000 \sfcode`;=1000 \sfcode`,=1000 }
\def\nonfrenchspace{\sfcode`.=3000 \sfcode`?=3000 \sfcode`!=3000
  \sfcode`:=2000 \sfcode`;=1500 \sfcode`,=1250 }

\mathcode`↑↑@="2201 % \cdot
\mathcode`↑↑A="3223 % \downarrow
\mathcode`↑↑B="010B % \alpha
\mathcode`↑↑C="010C % \beta
\mathcode`↑↑D="225E % \land
\mathcode`↑↑E="023A % \lnot
\mathcode`↑↑F="010F % \epsilon
\mathcode`↑↑G="0119 % \lambda
\mathcode`↑↑H="0115 % \pi
\mathcode`\↑↑I="010D % \gamma
\mathcode`\↑↑J="010E % \delta
\mathcode`\↑↑K="3222 % \uparrow
\mathcode`\↑↑L="2206 % \pm
\mathcode`\↑↑M="2208 % \oplus
\mathcode`↑↑N="0231 % \infty
\mathcode`↑↑O="0125 % \partial
\mathcode`↑↑P="321A % \propersubset
\mathcode`↑↑Q="321B % \propersupset
\mathcode`↑↑R="225C % \cap
\mathcode`↑↑S="225B % \cup
\mathcode`↑↑T="0238 % \forall
\mathcode`↑↑U="0239 % \exists
\mathcode`↑↑V="220A % \otimes
\mathcode`↑↑W="3224 % \doublearrow
\mathcode`↑↑X="3220 % \leftarrow
\mathcode`↑↑Y="3221 % \rightarrow
\mathcode`↑↑Z="321C % \ne
\mathcode`↑↑[="2277 % \diamond
\mathcode`↑↑\="3214 % \le
\mathcode`↑↑]="3215 % \ge
\mathcode`↑↑↑="3211 % \eqv
\mathcode`↑↑_="225F % \lor
\mathcode` ="0234 % \emptyset
\mathcode`!="5021
\mathcode`"="5022
\mathcode`#="0271
\mathcode`$="027F
\mathcode`\%="0025
\mathcode`&="0026
\mathcode`'="0230 % \prime
\mathcode`(="4028
\mathcode`)="5029
\mathcode`*="2203 % \ast
\mathcode`+="202B
\mathcode`,="602C
\mathcode`-="2200
\mathcode`.="002E
\mathcode`/="002F
\mathcode`0="0030
\mathcode`1="0031
\mathcode`2="0032
\mathcode`3="0033
\mathcode`4="0034
\mathcode`5="0035
\mathcode`6="0036
\mathcode`7="0037
\mathcode`8="0038
\mathcode`9="0039
\mathcode`:="303A
\mathcode`;="603B
\mathcode`<="303C
\mathcode`=="303D
\mathcode`>="303E
\mathcode`?="503F
\mathcode`@="027C % \@
\mathcode`[="405B
\mathcode`\\="2204 % \rslash
\mathcode`]="505D
\mathcode`↑="000F
\mathcode`_="0235
\mathcode``="4060
\mathcode`{="4266
\mathcode`|="026A
\mathcode`}="5267
\mathcode`~="3218 % \sim
\mathcode`\↑↑?="027B % \P

\delcode`.=0
\delcode`(="028300
\delcode`)="029301
\delcode`[="05B302
\delcode`]="05D303
\delcode`<="26830A
\delcode`>="26930B
\delcode`|="26A30C
\delcode`/="02F30E
% N.B. { and } should not get delcodes (it would mess up parameter groups)
% Assign initial values to TeX's primitives

\message{primitives,}

% All of TeX's primitives that can be assigned a value are listed here.  Those
% that are left uninitialized are preceded by a % sign.

\lineskip 1pt
\baselineskip 12pt
\parskip 0pt plus 1pt
\dispskip 12pt plus 3pt minus 9pt
\dispaskip 0pt plus 3pt
\dispbskip 7pt plus 3pt minus 4pt
% \leftskip
% \rightskip
\topskip 10pt
\splittopskip 10pt
% \tabskip
% \spaceskip
% \xspaceskip
\parfillskip 0pt plus 1fil
\thinmuskip 3mu
\medmuskip 4mu plus 2mu minus 4mu
\thickmuskip 5mu plus 5mu
\output{\shipout\vbox{
    \baselineskip 18pt
    \box255
    \if T\numberthepages\hbox to 6.5truein{\hss\mainfont\number\count0\hss}\fi}
  \bumppagenumber}
\def\bumppagenumber{\ifnum\count0<0\global\advcount0 by-1
  \else\global\advcount0 by 1 \fi}
\def\numberthepages{T}
% \everypar
\pretolerance 100
\tolerance 200			% Initialized by TeX to 10000, but we change it
\linepenalty 10
\hyphenpenalty 50
\exhyphenpenalty 50
\clubpenalty 150
\widowpenalty 150
\displaywidowpenalty 50
\brokenpenalty 100
\binoppenalty 95
\relpenalty 50
\predisplaypenalty 10000
% \postdisplaypenalty
% \interlinepenalty
\doublehyphendemerits 10000
\finalhyphendemerits 1000
\adjdemerits 10000
% \mag				% Initialized by TeX to 1000
\delimiterfactor 900
\looseness 0
% \time				% Initialized by TeX to now
% \day				% ditto
% \month			% ditto
% \year				% ditto
\showboxbreadth 5
\showboxdepth 3
\hbadness 1000
\vbadness 1000
% \pausing
% \tracingonline
% \tracingmacros
% \tracingstats
% \tracingoutput
\tracinglostchars 1
% \tracingcommands
% \tracingparagraphs
% \tracingpages
\def\tracingall{\tracingonline1\tracingcommands2\tracingstats2\tracingpages1
  \tracingoutput1\tracinglostchars1\tracingmacros1\tracingparagraphs1
  \showboxbreadth99999\showboxdepth99999\errorstopmode} % for online debugging
\uchyph 1
% \outputpenalty
% \maxdeadcycles		% Initialized by TeX to 25
\parindent 20pt
% \mathsurround
\varunit 1pt
% \lineskiplimit
\hsize 6.5in
\vsize 8.9in
\maxdepth 2pt
% \splitmaxdepth
\boxmaxdepth 16383.99999pt
\hfuzz 0.1pt
\vfuzz 0.1pt
\delimiterlimit 5pt
% \nulldelimiterspace
\scriptspace 0.5pt
\overfullrule 5pt
% Here are macros for the automatic allocation of \count, \box, \dimen,
% \skip, and \muskip registers, \read and \write file numbers, \fam codes,
% and \insert numbers in TeX82.
%
% When a register is used only temporarily, it need not be allocated since
% grouping can be used, making the value previously in the register return
% after the close of the group.  The main use of these macros is for
% registers that are defined by one macro and used by others, possibly at
% different nesting levels.  All such registers should be defined through
% these macros; otherwise conflicts may occur, especially when two or more
% more macro packages are being used at once.
%
% The following counters are reserved:
%   0 to 9	page numbering
%       10	count allocation
%	11	box allocation
%	12	dimen allocation
%	13	skip allocation
%	14	muskip allocation
%	15	read file allocation
%	16	write file allocation
%	17	math family allocation
%       18	insert allocation
% New counters are allocated starting with 19, 20, etc.  Other objects are
% allocated starting with 10.  This leaves 0 through 9 for the user to play
% with safely, except that counts 0 to 9 are considered to be the page and
% subpage numbers (since they are displayed during output). In this scheme,
% \count 10 always contains the number of the highest-numbered counter that
% has been allocated, \count 11 the highest-numbered box, etc.
% Inserts are given numbers 254, 253, etc., since they require a \count,
% \box, \dimen, and \skip all with the same number; \count 19 contains the
% lowest-numbered insert that has been allocated. Of course, \box255 is
% reserved for \output; \count255, \dimen255, and \skip255 can be used freely.

\setcount10=18
\setcount11=9
\setcount12=9
\setcount13=9
\setcount14=9
\setcount15=9
\setcount16=9
\setcount17=9
\setcount18=255

% Now, we define \newcount, \newbox, etc. so that you can say \newcount\foo
% and \foo will be defined to be the number of the next counter.

\def\newcount{\allocate0\count \count18.}
\def\newbox{\allocate1\box \count18.}
\def\newdimen{\allocate2\dimen \count18.}
\def\newskip{\allocate3\skip \count18.}
\def\newmuskip{\allocate4\muskip 256.}
\def\newread{\allocate5\read 16.}
\def\newwrite{\allocate6\write 16.}
\def\newfam{\allocate7\fam 16.}
\def\allocate#1#2#3.#4{\global\advcount1#1 by 1
	\checkoverflow{1#1}{#3}#2
	\xdef#4{\the\count1#1 \space}}
\def\newinsert#1{\global\advcount18 by -1
	\checkoverflow{10}{\count18}\count
	\checkoverflow{11}{\count18}\box
	\checkoverflow{12}{\count18}\dimen
	\checkoverflow{13}{\count18}\skip
	\xdef#1{\the\count18 \space}}
\def\checkoverflow#1#2#3{\ifnum\count#1<#2
	\else\errmessage{No more room: can't allocate a new #3} \fi}

% Here's an example of allocation.
\newskip\next
\setskip\next=3pt plus 1pt minus 1pt
\edef\smallskip{\vskip\skip\next}
\newskip\next
\setskip\next=6pt plus 2pt minus 2pt
\edef\medskip{\vskip\skip\next}
\newskip\next
\setskip\next=12pt plus 4pt minus 4pt
\edef\bigskip{\vskip\skip\next}
% Here are macros to "simulate" some of the TeX80 primitives:

\message{macros,}

\def\thinspace{\kern .16667em }
\def\enspace{\kern.5em }
\def\enskip{{\hskip.5em}}
\def\quad{{\hskip1em}} % note, \kern didn't work in my poetry example
\def\qquad{{\hskip2em}}
\def\quad{\kern 1em }
\def\qquad{\kern 2em }
\def\linebreak{\newname\break}
%\def\pagebreak{\vadjust{\break}} % no longer supported
\def\eject{\ifhmode\par\fi\break}
\def\break{\penalty-10000 }
\def\nobreak{\penalty 10000 }
\def\goodbreak{\penalty-500}
\def\smallbreak{\par\ifdim\the\lastskip=0pt\penalty-50\smallskip\fi}
\def\medbreak{\par\ifdim\the\lastskip=0pt\penalty-100\medskip\fi}
\def\bigbreak{\par\ifdim\the\lastskip=0pt\penalty-200\bigskip\fi}
\def\filbreak{\vfil\penalty-200\vfilneg}
\def\slash{/\discretionary{}{}{}}

\mathchardef\join"1357
\mathchardef\meet"1356
\mathchardef\munion"1355
\mathchardef\inter"1354
\mathchardef\union"1353
\mathchardef\int"1352
\mathchardef\prod"1351
\mathchardef\sum"1350
\mathchardef\oprod"134E
\mathchardef\osum"134C
\mathchardef\odotprod"134A
\mathchardef\oint"1348
\mathchardef\squnion"1346
\mathchardef\sqsub"3276
\mathchardef\land"225E
\mathchardef\lor"225F
\mathchardef\cap"225C
\mathchardef\cup"225B
\mathchardef\glb"2275
\mathchardef\lub"2274
\mathchardef\smallint"1273
\mathchardef\nabla"0272
\mathchardef\lnot"023A
\mathchardef\dright"526D
\mathchardef\dleft"426C
\mathchardef\relvv"326B
\mathchardef\rightvv"526B
\mathchardef\leftvv"426B
\mathchardef\|"026B
\mathchardef\relv"326A
\mathchardef\rightv"526A
\mathchardef\leftv"426A
\mathchardef\dashv"5261
\mathchardef\vdash"4260
\mathchardef\uplus"225D
\mathchardef\Zscr"25A
\mathchardef\Yscr"259
\mathchardef\Xscr"258
\mathchardef\Wscr"257
\mathchardef\Vscr"256
\mathchardef\Uscr"255
\mathchardef\Tscr"254
\mathchardef\Sscr"253
\mathchardef\Rscr"252
\mathchardef\Qscr"251
\mathchardef\Pscr"250
\mathchardef\Oscr"24F
\mathchardef\Nscr"24E
\mathchardef\Mscr"24D
\mathchardef\Lscr"24C
\mathchardef\Kscr"24B
\mathchardef\Jscr"24A
\mathchardef\Iscr"249
\mathchardef\Hscr"248
\mathchardef\Gscr"247
\mathchardef\Fscr"246
\mathchardef\Escr"245
\mathchardef\Dscr"244
\mathchardef\Cscr"243
\mathchardef\Bscr"242
\mathchardef\Ascr"241
\mathchardef\not"3240
\mathchardef\top"023E
\mathchardef\imag"023D
\mathchardef\forall"0238
\mathchardef\exists"0239
\mathchardef\real"023C
\mathchardef\aleph"023B
\mathchardef\angle"0236
\mathchardef\emptyset"0234
\mathchardef\notin"3233
\mathchardef\in"3232
\mathchardef\infty"0231
\mathchardef\prime"0230
\mathchardef\mapsto"322F
\mathchardef\rsh"222E
\mathchardef\lsh"222D
\mathchardef\sim"3218
\mathchardef\simeq"3227
\mathchardef\grgr"3226
\mathchardef\lsls"3225
\mathchardef\uparrow"3222
\mathchardef\downarrow"3223
\mathchardef\doublearrow"3224
\mathchardef\leftarrow"3220
\mathchardef\rightarrow"3221
\mathchardef\uparroww"322A
\mathchardef\downarroww"322B
\mathchardef\doublearroww"322C
\mathchardef\leftarroww"3228
\mathchardef\rightarroww"3229
\mathchardef\neq"321C \let\ne=\neq
\mathchardef\leq"3214 \let\le=\leq
\mathchardef\geq"3215 \let\ge=\geq
\mathchardef\succ"321F
\mathchardef\prec"321E
\mathchardef\doteq"321D
\mathchardef\approx"3219
\mathchardef\succeq"3217
\mathchardef\preceq"3216
\mathchardef\propersupset"321B
\mathchardef\propersubset"321A
\mathchardef\supset"3213
\mathchardef\subset"3212
\mathchardef\bot"0210
\mathchardef\perp"3210
\mathchardef\diamond"2277
\mathchardef\bullet"220F
\mathchardef\interc"220E
\mathchardef\div"220D
\mathchardef\odot"220C
\mathchardef\odiv"220B
\mathchardef\otimes"220A
\mathchardef\ominus"2209
\mathchardef\oplus"2208
\mathchardef\mp"2207
\mathchardef\pm"2206
\mathchardef\circ"2205
\mathchardef\rslash"2204
\mathchardef\cdot"2201
\mathchardef\ast"2203
\mathchardef\times"2202
\mathchardef\varomega"17F
\mathchardef\vartheta"17E
\mathchardef\varphi"17D
\mathchardef\omega"17C
\mathchardef\psi"17B
\mathchardef\jit"140
\mathchardef\partial"125
\mathchardef\wp"124
\mathchardef\lscr"123
\mathchardef\iit"120
\mathchardef\chi"11F
\mathchardef\phi"11E
\mathchardef\upsilon"11D
\mathchardef\tau"11C
\mathchardef\sigma"11B
\mathchardef\rho"11A
\mathchardef\pi"119
\mathchardef\xi"118
\mathchardef\nu"117
\mathchardef\mu"116
\mathchardef\lambda"115
\mathchardef\kappa"114
\mathchardef\iota"113
\mathchardef\theta"112
\mathchardef\eta"111
\mathchardef\zeta"110
\mathchardef\epsilon"10F
\mathchardef\delta"10E
\mathchardef\gamma"10D
\mathchardef\beta"10C
\mathchardef\alpha"10B
\mathchardef\Omegait"10A
\mathchardef\Psiit"109
\mathchardef\Phiit"108
\mathchardef\Upsilonit"107
\mathchardef\Sigmait"106
\mathchardef\Piit"105
\mathchardef\Xiit"104
\mathchardef\Lambdait"103
\mathchardef\Thetait"102
\mathchardef\Deltait"101
\mathchardef\Gammait"100
\mathchardef\Omega"0A
\mathchardef\Psi"09
\mathchardef\Phi"08
\mathchardef\Upsilon"07
\mathchardef\Sigma"06
\mathchardef\Pi"05
\mathchardef\Xi"04
\mathchardef\Lambda"03
\mathchardef\Theta"02
\mathchardef\Delta"01
\mathchardef\Gamma"00

\def\rangle{\delimiter"526930B }
\def\langle{\delimiter"426830A }
\def\}{\delimiter"5267309 }
\def\{{\delimiter"4266308 }
\def\rceil{\delimiter"5265307 }
\def\lceil{\delimiter"4264306 }
\def\rfloor{\delimiter"5263305 }
\def\lfloor{\delimiter"4262304 }
\def\O{\char'100 }
\def\o{\char'40 }
\def\OE{\char'37 }
\def\AE{\char'36 }
\def\oe{\char'35 }
\def\ae{\char'34 }
\def\ss{\char'33 }
\newskip\next \setskip\next=-10000pt plus 1fil \edef\hidewidth{\hskip\skip\next}
\def\.#1{\vbox{\baselineskip0pt\lineskip.25ex
    \halign{##\cr\hidewidth.\hidewidth\cr#1\cr}}}
\def\d#1{\vtop{\baselineskip0pt\lineskip.25ex
    \halign{##\cr#1\cr\hidewidth.\hidewidth\cr}}}
\def\b#1{\vtop{\baselineskip0pt\lineskip.25ex
    \halign{##\cr#1\cr\hidewidth\char'22\hidewidth\cr}}}
\def\aa{\accent'27 a}
\def\AA{\rlap{\raise.25ex\hbox{\char'27}}A}
\def\c#1{\setbox0\hbox{#1}\ifdim1ht0=1ex\accent'30 #1%
  \else\hbox to 1wd0{\hss\char'30\hss#1}\fi}
\def\l{\accent'31 l} % will replace by \char'31 in new font, it will kern with l
\def\L{\rlap{\raise.56ex\hbox{\char'31}}L} % again, the kern will eventually work
\def\t#1{{\accent'32 #1}}
\def\H#1{{\accent'26 #1}}
\def\'#1{{\accent'16 #1}}
\def\`#1{{\accent'15 #1}}
\def\"#1{{\accent'23 #1}}
\def\~#1{{\accent'24 #1}} \def\squiggle{\mathaccent'24 }
\def\=#1{{\accent'22 #1}} \def\bar{\mathaccent'22 }
\def\u#1{{\accent'21 #1}} \def\breve{\mathaccent'21 } \let\↑↑S=\u
\def\v#1{{\accent'20 #1}} \def\hook{\mathaccent'20 } \let\↑↑_=\v
\def\↑#1{{\accent'17 #1}} \def\hat{\mathaccent'17 } \let\↑↑D=\↑
\def\vec{\mathaccent'25 }
\def\j{\char'14 }
\def\i{\char'13 }
\def\,{\mskip\the\thinmuskip}
\def\>{\mskip\the\medmuskip}
\def\;{\mskip\the\thickmuskip}
\def\↑↑]{\nonscript\,}
\def\!{\mskip\minusthe\thinmuskip}
\def\<{\mskip\minusthe\medmuskip}
\def\?{\mskip\minusthe\thickmuskip}
\def\↑↑\{\nonscript\mskip\minusthe\thinmuskip}
\let\comb=\atopwithdelims
\def\sqrt{\radical"270370 }

\let\↑↑M=\ % control carriage-return = control space
\let\↑↑I=\ % same for tab
\let\↑↑@=\ % same for null
% Here are other macros

\edef\%{\char\number`\%\space}
\edef\&{\char\number`\&\space}
% \#, \@, and \$ will be similar to \% and \& in the forthcoming am fonts;
% meanwhile, we don't have \#, \@, and \$ in bold, slanted, or text italic
\def\mathhexbox#1{\hbox{$\mathsurround0pt\mathchar"#1$}}
\def\#{\mathhexbox{271}}
\def\@{\mathhexbox{27C}}
\def\${\mathhexbox{27F}}
\def\_{\kern.06em\vbox{\hrule width.3em}} % underline in identifiers
\def\sterling{\mathhexbox{27E}}
\def\copyright{\mathhexbox{27D}}
\def\P{\mathhexbox{27B}}
\def\ddag{\mathhexbox{27A}}
\def\dag{\mathhexbox{279}}
\def\section{\mathhexbox{278}}

% \def\lft#1{{#1}\hfill} the old \lft, \ctr, \rt aren't recommended for TeX82
% \def\ctr#1{\hfill{#1}\hfill}
% \def\rt#1{\hfill{#1}}

\def\line{\hbox to\the\hsize}
\def\ljustline#1{\line{#1\hss}}
\def\rjustline#1{\line{\hss#1}}
\def\ctrline#1{\line{\hss#1\hss}}

\def\log{\mathop{\rm log}\limitswitch}
\def\lg{\mathop{\rm lg}\limitswitch}
\def\ln{\mathop{\rm ln}\limitswitch}
\def\lim{\mathop{\rm lim}}
\def\limsup{\mathop{\rm lim\,sup}}
\def\liminf{\mathop{\rm lim\,inf}}
\def\sin{\mathop{\rm sin}\limitswitch}
\def\cos{\mathop{\rm cos}\limitswitch}
\def\tan{\mathop{\rm tan}\limitswitch}
\def\cot{\mathop{\rm cot}\limitswitch}
\def\sec{\mathop{\rm sec}\limitswitch}
\def\csc{\mathop{\rm csc}\limitswitch}
\def\max{\mathop{\rm max}}
\def\min{\mathop{\rm min}}
\def\sup{\mathop{\rm sup}}
\def\inf{\mathop{\rm inf}}
\def\det{\mathop{\rm det}}
\def\exp{\mathop{\rm exp}\limitswitch}
\def\Pr{\mathop{\rm Pr}}
\def\gcd{\mathop{\rm gcd}}
\def\choose{\atopwithdelims ()}
\def\leftset{\mathopen{\{\,}}
\def\rightset{\mathclose{\,\}}}
\def\modop{\<\,\mathbin{\rm mod}\penalty900\<\,}
\def\mod#1{\penalty0\;({\rm mod}\,\,#1)}
\def\eqv{\mathchar"3211 }
\def\neqv{\not\eqv}

% the "dots" macros make use of TeX's math spacing rules.
\mathchardef\ldotp="602E % ldot as a punctuation mark
\mathchardef\cdotp="6201 % cdot as a punctuation mark
\def\ldots{{\ldotp\ldotp\ldotp}}
\def\cdots{{\cdotp\cdotp\cdotp}}
\def\ldotss{\ldots\mathord{}}
\def\cdotss{\cdots\mathord{}}
\def\ldotsm{\errmessage{With TeX82, just say \string\ldots}\ldots}

\def\vdots{\vbox{\baselineskip 4pt\vskip 6pt\hbox{.}\hbox{.}\hbox{.}}}

\def\alt#1{\left\{\,\vcenter{\halign{$##\hfil$&\quad##\hfil\cr#1}}\right.}
\def\eqalign#1{\baselineskip15pt\lineskip3pt\lineskiplimit3pt
  \vcenter{\halign{\hfill$\displaystyle{##}$&$\displaystyle{\null##}$\hfill
      \cr#1}}}
\def\eqalignno#1{\baselineskip15pt\lineskip3pt\lineskiplimit3pt
  \vbox{\tabskip 0pt plus 1000pt minus 1000pt
   \halign to \the\displaywidth{\hfill$\displaystyle{##}$\tabskip 0pt
   &$\displaystyle{\null##}$\hfill\tabskip 0 pt plus 1000pt minus 1000pt
   &\hfill$ ##$\tabskip 0pt\cr#1}}}
\def\cpile#1{\vcenter{\halign{\hfill$## $\hfill\cr#1}}}
\def\lpile#1{\vcenter{\halign{$## $\hfill\cr#1}}}
\def\rpile#1{\vcenter{\halign{\hfill$## $\cr#1}}}
\def\null{\hbox{}}
\def\twoline#1#2#3{\vbox{
    \hbox to \the\displaywidth{$\quad\displaystyle{#1}$\hfill}
    \vskip#2\hbox to \the\displaywidth{\hfill$\displaystyle{#3}\quad$}}}

\def\chop to#1pt#2{{\setbox0\hbox{$\displaystyle{#2}$}\hbox{\lower#1pt\null
    \vbox to 1ht0{\box0\vss}}}} % pretends that #2 is #1pt deep
% I plan to replace \chop by \makedepth; will have \makeheight,\makewidth too

\def\newname#1{\errmessage{In TeX82, please call this operation \string#1} #1}
\def\spose#1{\newname\rlap{#1}}
\def\rlap#1{\hbox to 0pt{#1\hss}}
\def\llap#1{\hbox to 0pt{\hss#1}}

\def\nointerlineskip{\prevdepth-1000pt }
\def\topspace{\hrule height0pt\vskip}
	% e.g. "\topspace 1in" puts an inch of space at the top of a page

\def\hang{\hangindent\the\parindent}
\def\item#1{\par\noindent\hang
  \hbox to\the\parindent{\hss#1\enspace}\ignorespace}
\def\itemitem#1{\par\noindent
  \setdimen0=\the\parindent \hangindent2dm0
  \hbox to2dm0{\hss#1\enspace}\ignorespace}
\def\narrower{\setskip0=\the\leftskip \advskip0 by 20pt \leftskip=\skip0
  \setskip0=\the\rightskip \advskip0 by 20pt \rightskip=\skip0 }

\def\biglp{\mathopen{\vcenter{\hbox{\tenex\char'0}}}}
\def\bigrp{\mathclose{\vcenter{\hbox{\tenex\char'1}}}}
\def\bigglp{\mathopen{\vcenter{\hbox{\tenex\char'22}}}}
\def\biggrp{\mathclose{\vcenter{\hbox{\tenex\char'23}}}}
\def\biggglp{\mathopen{\vcenter{\hbox{\tenex\char'40}}}}
\def\bigggrp{\mathclose{\vcenter{\hbox{\tenex\char'41}}}}

\def\magnify#1{\mag=#1\hsize=6.5truein\vsize=8.9truein}

\def\raggedright{\rightskip 0pt plus 2em \spaceskip .3333em \xspaceskip .5em}
\def\ttraggedright{\rightskip 0pt plus 2em} % for use with \tt only
% Definitions for preloaded fonts
% (Fonts assigned to \preloaded are not part of "plain TeX",
% but they are preloaded so that other format packages can use them.
% For example, if another set of macros says "\font\ninerm=cmr9",
% TeX will not have to reload the font metric information for cmr9.)

\message{fonts,}

\font\tenrm=cmr10
\font\preloaded=cmr9
\font\preloaded=cmr8
\font\sevenrm=cmr7
\font\preloaded=cmr6
\font\fiverm=cmr5
\font\preloaded=amr10

\font\teni=cmi10 % math italic
\font\preloaded=cmi9
\font\preloaded=cmi8
\font\seveni=cmi7
\font\preloaded=cmi6
\font\fivei=cmi5

\font\tensy=amsy10 % math symbols
\font\preloaded=amsy9
\font\preloaded=amsy8
\font\sevensy=amsy7
\font\preloaded=amsy6
\font\fivesy=amsy5

\font\tenex=amathx % math extension

\font\tenfr=eufrak % Fraktur

\font\preloaded=cmss10 % sans serif
\font\preloaded=cmss9
\font\preloaded=cmss8

\font\preloaded=cmsss % slanted sans serif
\font\preloaded=cmsss9
\font\preloaded=cmsss8
\font\preloaded=amsss8

\font\tenbf=cmb10 % boldface extended
\font\preloaded=cmb9
\font\preloaded=cmb8
\font\preloaded=ambx10

\font\tentt=cmtt % typewriter
\font\preloaded=cmtt9
\font\preloaded=cmtt8
\font\preloaded=amtt

\font\preloaded=cmst % slanted typewriter

\font\tensl=cms10 % slanted roman
\font\preloaded=cms9
\font\preloaded=cms8

\font\tenit=cmti10 % text italic
\font\preloaded=cmti9
\font\preloaded=cmti8
\font\preloaded=cmti7

\message{more fonts,}
\font\preloaded=cmu10 % unslanted text italic

\font\preloaded=cmbti % bold text italic
\font\preloaded=cmbsy % bold math symbols

\font\preloaded=cmcsc % caps and small caps
\font\preloaded=cmcsc9

\font\preloaded=cmssb % sans serif bold
\font\preloaded=cmss9b
\font\preloaded=cmss8b
\font\preloaded=amssb
\font\preloaded=amssb at 13pt

\font\preloaded=cmr7 at 21pt % for titles
\font\preloaded=cmtt at 15pt
\font\preloaded=cmr7 at 14pt

\font\preloaded=manfnt % METAFONT logo and dragon curve
\font\preloaded=cmdunh % Dunhill style
\font\preloaded=stan70 % Stanford seal

% the Xerox fonts at 9.090909bp are intended for \magnify{1100}
% since this makes them blend properly with cm symbol fonts
\font\preloaded=timesroman at 10bp % times roman
\font\preloaded=timesroman at 9.090909bp % times roman, \magnify{1100}
\font\preloaded=timesroman at 8bp
\font\preloaded=timesromani at 10bp % times italic
\font\preloaded=timesromani at 9.090909bp % times italic
\font\preloaded=timesromani at 8bp
\font\preloaded=timesromanb at 10bp % times roman bold
\font\preloaded=timesromanb at 9.090909bp % times roman bold

\font\preloaded=helvetica at 10bp % helvetica
\font\preloaded=helvetica at 9.090909bp % helvetica for \magnify{1100}
\font\preloaded=helvetica at 8bp
\font\preloaded=helveticai at 10bp % helvetica slanted
\font\preloaded=helveticai at 9.090909bp % helvetica italic
\font\preloaded=helveticai at 8bp
\font\preloaded=helveticab at 10bp % helvetica bold
\font\preloaded=helveticab at 9.090909bp % helvetica boldface

\let\preloaded=\undefined % preloaded fonts should be declared anew

\let\mainfont=\tenrm

\def\rm{\fam0\tenrm}
\textfont0=\tenrm \scriptfont0=\sevenrm \scriptscriptfont0=\fiverm
\textfont1=\teni \scriptfont1=\seveni \scriptscriptfont1=\fivei
\textfont2=\tensy \scriptfont2=\sevensy \scriptscriptfont2=\fivesy
\textfont3=\tenex \scriptfont3=\tenex \scriptscriptfont3=\tenex
\def\it{\fam4\tenit}
\textfont4=\tenit
\def\sl{\fam5\tensl}
\textfont5=\tensl
\def\bf{\fam6\tenbf}
\textfont6=\tenbf
\def\tt{\fam7\tentt}
\textfont7=\tentt
\baselineskip 12pt
\dispskip 12pt plus 3pt minus 9pt
\def\strut{{\vrule height8.5pt depth3.5pt width0pt}}
% Hyphenation, and initial values for standard layout

\message{hyphenation}

\input hyphen

\def\showhyphens#1{\setbox0=\vbox{\parfillskip0pt\hsize10000pt\tenrm
  \pretolerance-1\tolerance-1\hbadness0\showboxdepth0\ #1}}

\setcount0=1 % first page is number 1
\rm % select roman font
\nonfrenchspace % punctuation affects the spacing
\catcode`(=12 \catcode`)=12 % parentheses are no longer letters

\def\format{plain}\def\version{0} % identifies the current format